package bupt.party.online.service;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.hibernate.criterion.DetachedCriteria;

import bupt.party.online.model.Student;

public interface IStudentService {
	/**
	 * 根据学号和密码查询  用户
	 * @param userId
	 * @param password
	 * @return
	 */
	public Student findStudentByUserIdAndPassword(String userId,String password);
	
	
	
	/**
	 * 根据学号查询学生
	 * @param studentNO
	 * @return
	 */
	public Student  findStudentByStudentNO(String studentNO);
	
	/**
	 * 根据学号保存密码
	 * @param studentNO
	 * @param password
	 * @return
	 */
	public boolean savePasswordByStudentNO(String studentNO,String password);
	
	/**
	 * 保存学生对象
	 * @param student
	 */
	public void  saveOrUpdateStudent(Student student);
	
	
	/**
	 * 查询出所有的有效的学生用户(isDelete=0)
	 * @return
	 */
	public List<Student> findAllStudent();
	
	
	
	/**
	 * 根据branchID查询该第三级支部的有效学生用户的数量。 
	 * @param branchId
	 * @return
	 */
	public int getStudentCountByBranchId(int branchId);
	
	
	/*
	 * 逻辑删除学生
	 */
	public boolean deleteStudent(String studentNO);
	
	
	/** 
	 * 根据branchId查询组织下的学生列表
	 * @param branchId
	 * @return
	 */
	public List<Student> findStudentByBranchId(Integer branchId);
	
	
	/**
	 * 根据条件 查询分页记录
	 * @param conditions
	 * @param pageNow
	 * @param pageSize
	 * @return
	 */
	public List<Student> getStudentByConditions(Map<String,Object> conditions,int pageNow,int pageSize);


	/**
	 * 
	 * @param branchId
	 * @param firstResult
	 * @param pageSize
	 * @return
	 */
	public List<Student> QueryStudentByBranchId(int branchId, int pageNow,int pageSize);

	
	/**
	 * 构造查询条件
	 * @param highLevelQuery
	 * @param queryContent
	 * @param firstpa
	 * @param secondpa
	 * @return
	 */
	public DetachedCriteria getDetachedCriteria(Integer highLevelQuery,
			String queryContent, Integer firstpa,
			Integer secondpa);
	
	/**
	 * 查询学生数量
	 * @param detachedCriteria
	 * @return
	 */
	public int queryStudentCountWithCriteria(DetachedCriteria detachedCriteria);
	
	
	/**
	 * 
	 * @param detachedCriteria
	 * @param firstResult
	 * @param maxResults
	 * @return
	 */
	public List<Student> queryStudentWithCriteria(DetachedCriteria detachedCriteria,
			int pageNow, int pageSize);
	
	
	
	/**
	 * 根据学生号 和 所在的支部id号 查找一个学生
	 * @param studentNO
	 * @param branchId
	 * @return
	 */
	public Student findStudentByStudentNOAndBranchId(String studentNO,int branchId);
	
	
	/**
	 * 根据学生号 和 支部集合  查找一个学生。
	 * @param studentNO
	 * @param branch_ids
	 * @return
	 */
	public Student findStudentByStudentNOAndBranchIds(String studentNO, Set<Integer> branch_ids);
	
	
}
